#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> svec;            // 默认初始化，svec 不含任何元素

    vector<int> ivec;               // 初始状态为空
    // 在此处给 ivec 添加一些值
    vector<int> ivec2(ivec);        // 把 ivec 的元素拷贝给 ivec2
    vector<int> ivec3 = ivec;       // 把 ivec 的元素拷贝给 ivec3
    // vector<string> svec(ivec2);  // 错误：svec 的元素是 string 对象，不是 int

    vector<string> v0{"a", "an", "the"};    // 列表初始化
    // vector<string> v0("a", "an", "the"); // 错误

    vector<int> ivec4(10, -1);       // 10 个 int 类型的元素，每个都被初始化为 -1
    vector<string> svec2(10, "hi!"); // 10 个 string 类型的元素，每个都被初始化为 "hi!"

    vector<int> ivec5(10);            // 10 个元素，每个都初始化为 0
    vector<string> svec3(10);         // 10 个元素，每个都是空 string 对象

    // vector<int> vi = 10; // 错误：必须使用直接初始化的形式指定向量大小

    vector<int> v1(10);     // v1 有 10 个元素，每个的值都是 0
    vector<int> v2{10};     // v2 有 1 个元素，该元素的值是 10

    vector<int> v3(10, 1);  // v3 有 10 个元素，每个的值都是 1
    vector<int> v4{10, 1};  // v4 有 2 个元素，值分别是 10 和 1

    vector<string> v5{"hi"};        // 列表初始化：v5 有一个元素
    // vector<string> v6("hi");     // 错误：不能使用字符串字面值构建 vector 对象
    vector<string> v7{10};          // v7 有 10 个默认初始化的元素
    vector<string> v8{10, "hi"};    // v8 有 10 个值为 "hi" 的元素
}